package innovacion.dao;

import innovacion.excepcion.DAOExcepcion;
import innovacion.modelo.Idea;
import innovacion.util.ConexionDB;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;


public class IdeaDAO extends BaseDAO{
	
	public Collection<Idea> listar()
			throws DAOExcepcion {
		String query = "select coidea,notitulo from idea";
		Collection<Idea> lista = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			
			while (rs.next()) {				
				Idea vo = new Idea();
				vo.setCoIdea(rs.getInt("coidea"));
				vo.setNoTitulo(rs.getString("notitulo"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
	
	public Collection<Idea> listar_estado(String estado, String titulo)
			throws DAOExcepcion {
		String query = "select coidea,notitulo,flestado from idea where flestado= ? and notitulo like ?";
		Collection<Idea> lista = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,estado);
			stmt.setString(2, "%" + titulo + "%");
			rs = stmt.executeQuery();
			
			while (rs.next()) {				
				Idea vo = new Idea();
				vo.setCoIdea(rs.getInt("coidea"));
				vo.setNoTitulo(rs.getString("notitulo"));				
				vo.setFlEstado(rs.getString("flestado"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
	
	public Collection<Idea> listar_creada()
			throws DAOExcepcion {
		String query = "select coidea,notitulo,flestado from idea where flestado like 'CREADA'";
		Collection<Idea> lista = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			
			while (rs.next()) {				
				Idea vo = new Idea();
				vo.setCoIdea(rs.getInt("coidea"));
				vo.setNoTitulo(rs.getString("notitulo"));				
				vo.setFlEstado(rs.getString("flestado"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
	
	public Collection<Idea> obtener_idea(String coidea)
			throws DAOExcepcion {
		String query = "select Coidea,NoTitulo,TxDescripcion,TxClave1,TxClave2,TxClave3,TxClave4,DcArchivo from idea where coidea=?";
		Collection<Idea> lista = new ArrayList<Idea>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,coidea);
			rs = stmt.executeQuery();
			
			while (rs.next()) {				
				Idea vo = new Idea();
				vo.setCoIdea(rs.getInt("coidea"));
				vo.setNoTitulo(rs.getString("notitulo"));				
				vo.setTxDescripcion(rs.getString("txdescripcion"));
				vo.setTxClave1(rs.getString("txclave1"));
				vo.setTxClave2(rs.getString("txclave2"));
				vo.setTxClave3(rs.getString("txclave3"));
				vo.setTxClave4(rs.getString("txclave4"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
	
	

	public Idea insertar(Idea vo) throws DAOExcepcion {
		String query = "insert into idea (USUARIO_CoUsuario,notitulo,txdescripcion,txclave1,txclave2,txclave3,txclave4,dcarchivo,feregistro,horegistro) values(1,?,?,?,?,?,?,?,current_date(),current_time())";
			
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNoTitulo());
			stmt.setString(2, vo.getTxDescripcion());
			stmt.setString(3, vo.getTxClave1());
			stmt.setString(4, vo.getTxClave2());
			stmt.setString(5, vo.getTxClave3());
			stmt.setString(6, vo.getTxClave4());
			stmt.setString(7, vo.getDcArchivo());
					
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public Idea actualizar_estado(Idea vo) throws DAOExcepcion {
		String query = "update idea set flestado='PUBLICADA' where coidea=?";			
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getCoIdea());			
					
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public Idea actualizar_idea(Idea vo) throws DAOExcepcion {
		String query = "UPDATE innovaciondb.idea SET NoTitulo=?, TxDescripcion=?, TxClave1=?, TxClave2=?, TxClave3=?, TxClave4=?, DcArchivo=? WHERE CoIdea=?";			
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNoTitulo());
			stmt.setString(2, vo.getTxDescripcion());
			stmt.setString(3, vo.getTxClave1());
			stmt.setString(4, vo.getTxClave2());
			stmt.setString(5, vo.getTxClave3());
			stmt.setString(6, vo.getTxClave4());
			stmt.setString(7, vo.getDcArchivo());
			stmt.setInt(8, vo.getCoIdea());
					
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}
